#include "Spectrum.h"

class Genotype 
{
public:
	int MutateNegative();
	int MutatePositive();
	
	/* @return -1 if can't add oligo */ 
	int AddOligoOnFirstPosition(OLIGO oligo);
	
	/* @return -1 on non existing oligo */	 
	int RemoveOligoOnFirstPosition(OLIGO oligo);

	int Evaluate();

	std::vector<std::pair<int, NUCLEOTIDE> >  * getNucleotideChain() {return &this->nucleotideChain;}

	void GenerateGenotype();

	Genotype(Spectrum * sp, bool t =false);
	Genotype(const Genotype & gen);

	Spectrum * getSpectrum() { return this->spectrum;};
	std::vector<std::pair<int, NUCLEOTIDE> > * getChain() { return &(this->nucleotideChain);};
	bool canInsert(OLIGO ol);
	void Print();

	Genotype * Cross(Genotype * parent);
	OLIGO lastOligo; 



protected:
	std::vector<std::pair<int, NUCLEOTIDE> > nucleotideChain;	
	
	std::vector<int> mask;	
	Spectrum * spectrum;
};